#include <stdio.h>
#include <pthread.h>
#include <semaphore.h>
#include <string.h>

char buf[32] = {0};
sem_t sem1,sem2;

void*printk(void*arg)
{
    while(1)
    {
        sem_wait(&sem1);//申请资源，p操作,
        //有资源可以继续使用，无资源代码会阻塞等待
        //申请到资源后信号量值减一
        if(strncmp(buf,"quit",4)==0)
        break;
        printf("buf:%s",buf);
    }
    pthread_exit(NULL);
}

int main(int argc,const char*argv[])
{
    pthread_t tid;
    //初始化信号量
    if(sem_init(&sem1,0,0)<0);
    {
        perror("sem init err");
        return -1;
    }

    if(sem_init(&sem2,0 ,1 )<0)
    {
        perror("sem init err");
        return -1;
    }

    if(pthread_create(&tid,NULL,printk,NULL)!=0)
    {
        perror("pthread create err");
        return -1;
    }
    do
    {
        sem_wait(&sem2);
        fgets(buf,32,stdin);
        sem_post(&sem1);//释放资源，资源量加一
        if(strncmp(buf,"quit",4)==0)
        break;
    } while (1);
    
    
    return 0;
}